[watchOS 3] 新クラス「WKCrownSequencer」を使用して Apple Watch のデジタルクラウンの値を取得する #wwdc
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
watchOS 3 で「WKCrownSequencer」クラスが新規追加され、Apple Watch の デジタルクラウンの値を取得することが出来るようになりました。本記事では、デジタルクラウンの値を取得する手順をご紹介します。
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
実装
さっそく、WKCrownSequencer
を使ってデジタルクラウンの値を得る実装を紹介していきます。
インスタンス取得
WKCrownSequencer
のインスタンスは自分で作ったらダメなようです。watchOS 3 で WKInterfaceController
に crownSequencer
プロパティが追加されているのでこれを使用します。
let sequencer = self.crownSequencer
値変更イベントの受信を開始
デジタルクラウンの値を受け取り始めるためには WKCrownSequencer
の focus()
メソッドを使用します。
sequencer.focus()
デリゲートメソッドを実装
任意のオブジェクトを WKCrownDelegate
のデリゲートにして、デリゲートメソッドを実装すれば、デジタルクラウンの値が変更されたイベントをハンドリングできます。
WKCrownDelegate
には 2 つのメソッドが用意されているので必要なメソッドを実装します。
// デリゲートを設定 sequencer.delegate = self
crownDidRotate メソッド
crownDidRotate(WKCrownSequencer?, rotationalDelta: Double)
メソッドは、ユーザーがデジタルクラウンを回転させた時に呼ばれます。
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) { print("rotationalDelta:\(rotationalDelta) rotationsPerSecond:\(self.crownSequencer.rotationsPerSecond)") }
このメソッドの rotationalDelta
引数と WKCrownSequencer
の rotationsPerSecond
プロパティの値の意味は以下の通りです。
rotationalDelta
引数- 前回の更新からの差分を表す
- デジタルクラウンを 1 回転させると、値は 1.0 になる
- 回転方向によって符号がつく
rotationsPerSecond
プロパティ- デジタルクラウンの1秒あたりの回転速度を表す
- 必ず正の値になる
crownDidBecomeIdle メソッド
crownDidBecomeIdle(WKCrownSequencer?)
メソッドはユーザーがデジタルクラウンの回転を止めた時に呼ばれます。
func crownDidBecomeIdle(_: WKCrownSequencer?) { print("crownDidBecomeIdle") }
実行結果
アプリを実行してみたところ、以下のログが得られました。
rotationalDelta:0.0 rotationsPerSecond:0.0 rotationalDelta:0.0125 rotationsPerSecond:0.0 rotationalDelta:0.0125 rotationsPerSecond:0.0 rotationalDelta:0.01375 rotationsPerSecond:0.0 rotationalDelta:0.0125 rotationsPerSecond:0.0 rotationalDelta:0.01125 rotationsPerSecond:0.717350328657339 rotationalDelta:0.015 rotationsPerSecond:0.831662519507681 rotationalDelta:0.01125 rotationsPerSecond:0.756022415141964 rotationalDelta:0.015 rotationsPerSecond:0.831395277898851 rotationalDelta:0.0125 rotationsPerSecond:0.718074837905995 rotationalDelta:0.0025 rotationsPerSecond:0.226654052047093 rotationalDelta:0.0025 rotationsPerSecond:0.113374690043006 crownDidBecomeIdle
さいごに
本記事では、デジタルクラウンの値を取得する手順をご紹介しました。
今後も引き続き、watchOS 3 の新機能を試していきます。